#环形链表ll
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
from typing import Optional
from typing import ListNode
class Solution:
    def detectCycle(self, head: Optional[ListNode]) -> Optional[ListNode]:
# 1.判断链表是否有环   2.如果有环，如何找到这个环的入口
        fast=slow=head
        while fast!=None and fast.next!=None:
            fast=fast.next.next
            slow=slow.next

            if slow==fast:

                slow=head
                while slow!=fast:
                    fast=fast.next
                    slow=slow.next
                return slow

        return None



#1.为什么slow在第一圈未结束就被追上（即在slow走了x+y相遇），
#而不是 x+y +k(y+z) （k为假设slow走了k圈才被追上）

#2.为什么slow和fast一定能相遇？如果fast一次走3个节点呢？

#3.环的入口怎么得来的